package com.ddone.demo.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author ddone
 * @date 2024/3/23-14:14
 */
@Slf4j
public class DemoInterceptor implements HandlerInterceptor {
    /**
     * 作用： 前置校验，他有拦截功能！ 例如：登录保护，权限管理，权限管理！
     * 调用： 调用handler方法之前
     * @param request  请求对象 让我们获取数据！
     * @param response 响应对象 让我们返回数据，或者重定向！
     * @param handler  目标方法对象
     * @return true放行 false拦截  if(! preHandler()) {return ;}
     */

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        log.warn("request= "+request+" response= "+ response+"handler: "+handler);
        log.warn("DemoInterceptor.preHandle");
        return true;
    }


    /**
     * 作用：对执行后的结果进行修改和校验！  例如：敏感词汇处理
     * 时机：执行handler方法以后执行！
     *
     * @param request  请求
     * @param response 响应
     * @param handler  handler目标
     * @param modelAndView 数据【共享域】 + 逻辑视图名 -》 modelAndView
     *                     注意：做好非空判断，@ResponseBody注解此属性为null！
     */


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        log.warn("request= "+request+" response= "+ response+"handler: "+handler+" modelAndView="+modelAndView);
        log.warn("DemoInterceptor.postHandle");
    }

    /**
     * 作用：释放资源！
     * 时机：当时图渲染完毕以后调用！
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.warn("request= "+request+" response= "+ response+"handler: "+handler+" Exception="+ex);
    }
}
